#include<bits/stdc++.h>
#define int long long
#define endl '\n'
#define debug(x) cerr<<#x<<':'<<x<<endl
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
using namespace std;
const int N=305,mod=998244353;
int qpow(int a,int b){
    int res=1;
    while(b){
        if(b&1) (res*=a)%=mod;
        a=(a*a)%mod,b>>=1;
    }return res;
}
int n,m,k,s;
int ans;
int c[N],a[N],cnt[N];
vector<int> G[N];
void solve(){
    for(int i=1;i<=n;i++)
        for(int j:G[i]) if(c[i]==c[j]) return;
    int res=0;
    for(int i=1;i<=s;i++) res+=(++cnt[c[a[i]]]==1);
    (ans+=qpow(res,k))%=mod;
    for(int i=1;i<=s;i++) --cnt[c[a[i]]];
}
void dfs(int x){
    if(x>n){
        solve();
        return;
    }
    for(int i=1;i<=m;i++) c[x]=i,dfs(x+1);
}
signed main(){
	freopen("tree.in","r",stdin);
	freopen("tree.out","w",stdout);
    cin>>n>>m>>k>>s;
    for(int i=1;i<=s;i++) cin>>a[i];
    for(int i=1,u,v;i<n;i++){
        cin>>u>>v;
        G[u].push_back(v);
        G[v].push_back(u);
    }
    dfs(1);
    cout<<ans;
    return 0;
}
